﻿
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace spin100_Yww_SDK
{
    // <summary>
    // 鱼尾纹c#SDK  由spin100 编写   QQ83329963，QQ群778221666   欢迎大佬一起讨论完善
    /*
         返回 0 继续执行下一个插件的事件
         返回 1 执行完当前插件，不再执行下一个插件了
         权限_发私聊消息         10  发送私聊消息
         权限_加好友             11  添加或被添加好友
         权限_删除联系人         12  包括删除好友和退出群
         权限_发群聊消息         20  发送群消息
         权限_加群               21  包括加群和同意被邀请进群
         权限_创建群             22  创建微信群的权限
         权限_删除群成员         23  删除群成员
         权限_发公众号消息       30  发送公众号消息
         权限_群发消息           40  群发消息
         权限_获取附近人         50  获取附近的人列表
         权限_附近人打招呼       51  向附近的人打招呼
         权限_发朋友圈           60  发朋友圈
         权限_评论朋友圈         61  评论朋友圈
         权限_获取朋友圈         62  获取朋友圈、好友朋友圈等
         权限_操作朋友圈         63  删除朋友圈、删除评论、取消赞等
         权限_抢红包             70  抢红包
         权限_获取联系人列表     71  获取好友列表，群列表，群成员列表等
         权限_修改资料           72  修改头像，资料，群名等
         权限_登录退出其它设备   73  接受其它设备的登录请求，需要账号密码登录才有效
         权限_更新自身           74  更新插件自身
         权限_收钱               75  调用收钱API

         */
    // </summary>
    public class Main 
    {
        public static YwStudent one = new YwStudent();
        //插件信息配置     
        [DllExport(ExportName = "AppInfo", CallingConvention = CallingConvention.StdCall)]
        //加载插件信息
        public static string AppInfo(int session)
        {
            one.ret = 1; //固定1
            one.apiver =1;//SDK版本，1GBK编码，2UTF8编码
            one.appid = "spin100";// 应用ID
            one.name = "短信接码";//应用名称
            one.version = "1.0";//应用版本
            one.version_id = "18112900"; // 创建版本号
            one.author = "spin100"; //作者
            one.description = "短信接码机器人";//说明简介
            one.permissions = new long[2] { 10, 75 };//数组设置插件需要的权限，10、私聊，75、调用转账收钱API，
            one.ico = API.Imgbase64; // 图标图片经过转码后的base64数据
            string jsonData = JsonConvert.SerializeObject(one);
            return jsonData;
        }
      
        [DllExport(ExportName = "Initialize", CallingConvention = CallingConvention.StdCall)]
        public static int Initialize(int AuthCode) //应用AuthCode接收 //请不要在本函数添加其他代码
        {
            API.auth_code = AuthCode;
            //框架为插件所创建的一个目录，希望作者们把当前插件的所有数据都写入到此目录下面，以免跟其他插件混淆
            return 0;
        }
        [DllExport(ExportName = "_eventStartup", CallingConvention = CallingConvention.StdCall)]
        public static int _eventStartup(string s1,string s2, string JsonValue) //type 1 鱼尾纹启动
        {
            /*
            插件启用时，运行一次这里（在可爱猫启动的时候也会触发一次）
            */

            return 0;
        }
        [DllExport(ExportName = "_eventExit", CallingConvention = CallingConvention.StdCall)]

        public static int _eventExit() //插件被点击停止按钮时/插件重载/插件卸载/软件退出，触发此事件
        {


            return 0;
        }

        [DllExport(ExportName = "_eventEnable", CallingConvention = CallingConvention.StdCall)]
        public static int _eventEnable(string rob_wxid,string rob_wxname,int type) //type 3 应用已被启用
        { 
            //当应用被启用后，将收到此事件
            //如果鱼尾纹载入时应用已被启用，则在_eventStartup(Type=1,鱼尾纹启动)被调用后，本函数也将被调用一次。
            //如非必要，不建议在这里加载窗口。（可以添加菜单，让用户手动打开窗口）


            return 0;
        }

        [DllExport(ExportName = "_eventPrivateMsg", CallingConvention = CallingConvention.StdCall)]
        //群消息事件
        public static int _eventPrivateMsg(string fromuser,string Msg,int sub_type,int timestamp,string  MsgText)//Type=10 私聊消息
        {

            /*
              fromuser 消息发送人
              Msg      消息内容，已由鱼尾纹处理过的消息
              sub_type   常量 #消息类型_
              timestamp   消息时间
              MsgText  消息原文

            */


            return 0;
        }
        [DllExport(ExportName = "_eventGroupMsg", CallingConvention = CallingConvention.StdCall)]
        public static int _eventGroupMsg(string fromGroup, string fromuser,string Msg,int sub_type,int timestamp, string MsgText ) //Type=20 群消息
        {


            /*
            fromGroup 群ID
           fromuser     发送人
           Msg 消息内容，已由鱼尾纹处理过的消息
           sub_type 常量 #消息类型_
           timestamp   消息时间
           MsgText      消息原文
            */
            return 0;
        }
        [DllExport(ExportName = "_eventSendMsg", CallingConvention = CallingConvention.StdCall)]
        public static int _eventSendMsg(string Touser,string Msg,int Type,int sub_type,int timestamp,string MsgText) //Type=30 回调发送消息,回调其它设备发出的消息
        {  /*
            Touser  接收消息ID
            Msg    消息内容
            Type   1私聊 2群 3公众号
            sub_type  消息类型 1/文本 3/图片 34/语音 42/名片 43/视频 47/动态表情 48/地理位置 49/图文 53/视频会话 10000/系统消息 4900002/红包
            timestamp  消息时间
            MsgText  消息原文
            */
            return 0;// 返回0 下个插件继续处理该事件，返回1 拦截此事件不让其他插件执行
        }

        [DllExport(ExportName = "_eventPublicMsg", CallingConvention = CallingConvention.StdCall)]
        public static int _eventPublicMsg(string fromPublic, string Msg,int timestamp, string MsgText) //Type=40 公众号消息
        {
            /*
            fromPublic 公众号ID
              Msg    消息内容
              Type   1私聊 2群 3公众号
              timestamp  消息时间
              MsgText  消息原文
              */

            return 0; // 返回0 下个插件继续处理该事件，返回1 拦截此事件不让其他插件执行
        }
        [DllExport(ExportName = "_eventFriend_Add", CallingConvention = CallingConvention.StdCall)]
        public static int _eventFriend_Add(int subtype,int sendTime,string fromWXid) //Type=201 好友事件-好友已添加
        {
            /*
             subtype  子类型，目前固定为1
            sendTime  发送时间(时间戳)
             fromWXid  来源WXid

            */
            return 0;// 返回0 下个插件继续处理该事件，返回1 拦截此事件不让其他插件执行
        }
        [DllExport(ExportName = "_eventRequest_AddFriend", CallingConvention = CallingConvention.StdCall)]
        public static int _eventRequest_AddFriend(int subtype, int sendTime,string fromuser,string msg,string V1,string V2,string MsgText) //Type=301 请求-好友添加
        {
            /*
              subtype  1收到请求 2发出请求
              sendTime  发送时间(时间戳)
              fromuser  来源wxid（发出为请求的目标）
              msg   附言
              V1  encryptusername
              V2  ticket
              MsgText         完整消息
          */

            return 0;// 返回0 下个插件继续处理该事件，返回1 拦截此事件不让其他插件执行
        }
        [DllExport(ExportName = "_eventRequest_AddGroup", CallingConvention = CallingConvention.StdCall)]
        public static int _eventRequest_AddGroup(int subtype,int sendTime,string fromwxid,string MsgText) //Type=302 请求-群添加
        {
            /*
           subtype 1被邀请进群 2收到进群申请
           sendTime  发送时间(时间戳)
           fromwxid  来源wxid 1邀请人 2申请的群
           MsgText    完整消息
          */

            return 0;// 返回0 下个插件继续处理该事件，返回1 拦截此事件不让其他插件执行
        }
        [DllExport(ExportName = "_eventSystem_GroupMemberIncrease", CallingConvention = CallingConvention.StdCall)]
        public static int _eventSystem_GroupMemberIncrease(int sendTime,string fromGroup,string fromwxid, string beingfromwxid,string MsgText) //Type=102 群事件-群成员增加
        {
            /*
        sendTime  发送时间(时间戳)
        fromGroup  来源群号
        fromwxid  邀请者wxid
        beingfromwxid  被操作wxid，注意：如果同时多个人进群以换行符分割
        MsgText  完整消息
           */
            return 0;// 返回0 下个插件继续处理该事件，返回1 拦截此事件不让其他插件执行
        }
        
        [DllExport(ExportName = "_menu", CallingConvention = CallingConvention.StdCall)]
        public static int _menu()//当用户点击更多设置时调用此事件
        {

            spin100 form = new spin100();
            DialogResult dr = form.ShowDialog();
           
            return 0;
        }
        [DllExport(ExportName = "_modify", CallingConvention = CallingConvention.StdCall)]
        public static int _modify(string name,string volu)//Type=6 当用户在点击保存时无论变量是否被修改都将调用此事件，AppInfo事件中设置了多少变量即调用多少次
        {

           

            return 0;
        }
        /*
         返回 0 继续执行下一个插件的事件
         返回 1 执行完当前插件，不再执行下一个插件了

         
         */
    }

}
